// 给你一个整数数组 nums ，数组中的元素 互不相同 。返回该数组所有可能的子集（幂集）。

// 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

// 示例 1：

// 输入：nums = [1,2,3]
// 输出：[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
// 示例 2：

// 输入：nums = [0]
// 输出：[[],[0]]

var subsets = function (nums) {
  const ans = [[...nums]];
  const map = new Map();
  let nexts = [[...nums]];
  while (nexts[0].length > 1) {
    let _nexts = [];
    for (let left = 0; left < nexts.length; left++) {
      const next = nexts[left];
      for (let right = 0; right < next.length; right++) {
        const _ans = next.filter((_, i) => i !== right);
        if (!map.has(_ans.toString())) {
          _nexts.push(_ans);
        }
        map.set(_ans.toString(), true);
      }
    }
    nexts = _nexts;
    ans.push(...nexts);
  }
  return [[], ...ans];
};
// 答案
var subsets2 = function (nums) {
  const res = [[]];
  function dfs(start, path) {
    for (let i = start; i < nums.length; i++) {
      path.push(nums[i]);
      res.push([...path]);
      dfs(i + 1, path);
      path.pop();
    }
  }
  dfs(0, []);
  return res;
};
const ans = subsets([]);
console.log("ans: ", ans);
